package com.xyazm.order.service;

import com.xyazm.common.message.ActualRefundMessage;
import com.xyazm.order.domain.dto.CancelOrderAssembleDTO;
import com.xyazm.order.domain.mq.ActualRefundDTO;
import com.xyazm.order.domain.param.*;

/**
 * 订单中心-逆向售后业务接口
 * @Author: xuyou
 * @Date: 2022/6/6 13:55
 * @Description:
 */
public interface IAfterSaleService {

    /**
     * 取消订单/超时未支付取消 2.0
     * <p>
     * 有3个调用的地方：
     * 1、用户手动取消，订单出库状态之前都可以取消
     * 2、消费正向生单之后的MQ取消，要先判断支付状态，未支付才取消。
     * 3、延迟消息超过30分钟，未支付才取消
     */
    void cancelOrder(CancelOrderParam param);

    /**
     * 执行退款前计算金额、记录售后信息等准备工作 2.0
     * @author xuyou
     * @date: 2022/6/29 10:26
     */
    void processCancelOrder(CancelOrderAssembleParam param);

    /**
     * 执行退款 2.0
     * @author xuyou
     * @date: 2022/7/1 16:54
     * @param actualRefundDTO
     */
    void refundMoney(ActualRefundDTO actualRefundDTO);

    /**
     * 支付系统取消订单回调 2.0
     * @author xuyou
     * @date: 2022/7/6 9:49
     */
    void payRefundCallback(PayRefundCallbackParam param);

    /**
     * 获取售后退款单id 2.0
     * @author xuyou
     * 2022-12-13 20:57
    */
    Long customerFindAfterSaleRefundInfo(ReceiveCustomerAfterSaleParam param);


    /**
     * 正向生单后的执行取消订单前验证 2.0
     * @author xuyou
     * 2023-02-23 22:15
    */
    void verifyBeforeOrderCancellation(String orderId);

}
